package com.tansun.rule.redis;

import java.util.List;

public interface RedisService<T> {
    /** 
     * 批量删除key 
     * @param pattern 
     */  
    public void removePattern(final String pattern) ;
    /** 
     * 删除对应的value 
     * @param key 
     */  
    public void remove(final String key);
	/** 
     * 批量删除对应的value 
     * @param keys 
     */  
    public void remove(final String... keys);
    /** 
     * 判断缓存中是否有对应的value 
     * @param key 
     * @return 
     */  
    public boolean exists(final String key) ;
    /** 
     * 读取缓存 
     * @param key 
     * @return 
     */  
    public Object get(final String key) ;
    /** 
     * 写入缓存 
     * @param key 
     * @param value 
     * @return 
     */  
    public boolean set(final String key, Object value) ;
	  /** 
     * 写入缓存 
     * @param key 
     * @param value 
     * @return 
     */  
    public boolean set(final String key, Object value, Long expireTime);
    /**
     * @description 简单的往数组里面添加元素
     * @param key
     * @param value
     */
    public int lPush(String key, Object value);
    /**
     * @description 批量往数组里面添加元素
     * @param key
     * @param list
     */
    public int lPushAll(String key, List<T> list);
    /**
     * @description  对指定下标的数组元素进行替换
     * @param key
     * @param offset
     * @param value
     */
    public void set(String key, int offset, String value);
    /**
     * @description  对指定下标的数组进行插入数据
     * @param key
     * @param value1    原有值
     * @param value2    插入的值
     */
    public void insert(String key, String value1, String value2);
    /**
     * @description  获取指定下标的数组元素
     * @param key
     * @param offset
     */
    public void getValueByIndex(String key, int offset);
    /**
     * @description  获取数组长度
     * @param key
     */
    public void size(String key);
    /**
     * @description 移除数组匹配到的数据元素
     * @param key
     * @param count     负数：从右往左     整数：从左往右
     * @param value  移除的值
     */
    public void remove(String key, long count, String value);
    /**
     * @description 保留区间内的元素，区间外的全部删除
     * @param key
     * @param start  区间开始
     * @param end    区间结束
     */
    public void trim(String key, int start, int end);
    /**
     * @description 从左到右，删除第一个元素
     * @param key
     */
    public String lpop(String key);
    public List<String> lpop(String key,int count);
    public List<List<String>> lpopList(String key,int count);
    /**
     * @description  查询区间范围内的元素
     * @param key
     * @param start
     * @param end
     */
    public List<String> lrange(String key, int start, int end);
    public List<List<String>> lrangeList(String key, int start, int end);
    /**
     * @description 两个list之间移元素
     * @param sourceKey        源
     * @param destinationKey  目的地
     */
    public void rightPopAndLeftPush(String sourceKey, String destinationKey);
}
